﻿// Tischpreiskegeln
//
// vorgesehen für die FF Feichtenberg zur Unterstützung des alljährlich stattfindenen
// Tischpreiskegelns.
// 
// Autoren:
// Eder Philipp S0910438031
// Lutt Martin  S0910438076
// (FH Wels)
//
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace fff_preiskegeln
{
    public partial class frmschusseingabe : Form
    {
        /// <summary>
        /// Es wird immer der Fokus des aktuellen Schusses gespeichert
        /// </summary>
        private int aktuellerSchuss = 1;
        /// <summary>
        /// ID der Person
        /// </summary>
        private int idperson;
        /// <summary>
        /// Touren werden mitgezählt
        /// Kann positiv oder negativ sein.
        /// </summary>
        private int Touren;
        /// <summary>
        /// Verbindung zur Datenbank
        /// </summary>
        private dbVerbindung verbindung;
        /// <summary>
        /// Aktueller ZEitpunkt wird benötigt für das Abspeichern der Schussfolge
        /// </summary>
        private DateTime aktuelleZeit;
        /// <summary>
        /// Alle Zähler werden gesetzt und die Anzeige wird aktualisiert
        /// </summary>
        /// <param name="datenbank">Verbindungsdaten zur Datenbank</param>
        /// <param name="id">ID der Person</param>
        /// <param name="Tourenanzahl">Anzahl der bezahlten Touren</param>
        public frmschusseingabe(dbVerbindung datenbank, int id, int Tourenanzahl)
        {
            InitializeComponent();
            verbindung = datenbank;
            idperson = id;
            Touren = Tourenanzahl;
            lblTourenAnzahl.Text = Convert.ToString(Tourenanzahl);
            lblfamilienname.Text = verbindung.Familienname(idperson);
            lblvorname.Text = verbindung.Vorname(idperson);
            lblschuss1.BackColor = Color.Yellow;
        }

        /// <summary>
        /// Fenstergröße wird automatisch an die Fenster angepasst
        /// </summary>
        private void frmschusseingabe_Load(object sender, EventArgs e)
        {
            this.Location = new Point(0, 0);
            this.Width = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Width;
            this.Height = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height;
        }

        /// <summary>
        /// Es wird je nach akutellerSchuss wie weit der Status ist.
        /// Das nächste aktuelle Anzeigefeld wird gelb hinterlegt und der übergebene Wert angezeigt.
        /// Die Summe wird anschließend berechnet und ausgegeben.
        /// </summary>
        /// <param name="iWert">Der geschossene Wert</param>
        private void AnzeigeBerechnen(int iWert)
        {
            string sWert = Convert.ToString(iWert);
            switch (aktuellerSchuss)
            {
                case 1:
                    {
                        lblschuss1.Text = sWert;
                        lblschuss1.BackColor = this.lblsumme.BackColor;
                        lblschuss2.BackColor = Color.Yellow;
                        break;
                    }
                case 2:
                    {
                        lblschuss2.Text = sWert;
                        lblschuss2.BackColor = this.lblsumme.BackColor;
                        lblschuss3.BackColor = Color.Yellow;
                        break;
                    }
                case 3:
                    {
                        lblschuss3.Text = sWert;
                        lblschuss3.BackColor = this.lblsumme.BackColor;
                        lblschuss4.BackColor = Color.Yellow;
                        break;
                    }
                case 4:
                    {
                        lblschuss4.Text = sWert;
                        lblschuss4.BackColor = this.lblsumme.BackColor;
                        lblschuss5.BackColor = Color.Yellow;
                        break;
                    }
                case 5:
                    {
                        lblschuss5.Text = sWert;
                        lblschuss5.BackColor = this.lblsumme.BackColor;
                        break;
                    }
                    // Dieser Fall kann nicht eintreten, ist programmtechnisch ausgeschlossen worden
                default:
                    {
                        lblsumme.Text = "???";
                        break;
                    }
            }
            aktuellerSchuss++;
            int iSumme = Convert.ToInt32(lblschuss1.Text) + Convert.ToInt32(lblschuss2.Text) + Convert.ToInt32(lblschuss3.Text) + Convert.ToInt32(lblschuss4.Text) + Convert.ToInt32(lblschuss5.Text);
            lblsumme.Text = Convert.ToString(iSumme);
            // Ziffernbuttons werden auf false gesetzt weil es nicht mehr möglich ist etwas einzugeben
            if (aktuellerSchuss >= 6)
            {
                btn0.Enabled = false;
                btn1.Enabled = false;
                btn2.Enabled = false;
                btn3.Enabled = false;
                btn4.Enabled = false;
                btn5.Enabled = false;
                btn6.Enabled = false;
                btn7.Enabled = false;
                btn8.Enabled = false;
                btn9.Enabled = false;
                btn10.Enabled = false;
            }
        }

        #region Aufruf von AnzeigeBerechnen von allen Ziffernbuttons

        private void btn0_Click(object sender, EventArgs e)
        {
            AnzeigeBerechnen(0);
        }

        private void btn1_Click(object sender, EventArgs e)
        {
            AnzeigeBerechnen(1);
        }

        private void btn2_Click(object sender, EventArgs e)
        {
            AnzeigeBerechnen(2);
        }

        private void btn3_Click(object sender, EventArgs e)
        {
            AnzeigeBerechnen(3);
        }

        private void btn4_Click(object sender, EventArgs e)
        {
            AnzeigeBerechnen(4);
        }

        private void btn5_Click(object sender, EventArgs e)
        {
            AnzeigeBerechnen(5);
        }

        private void btn6_Click(object sender, EventArgs e)
        {
            AnzeigeBerechnen(6);
        }

        private void btn7_Click(object sender, EventArgs e)
        {
            AnzeigeBerechnen(7);
        }

        private void btn8_Click(object sender, EventArgs e)
        {
            AnzeigeBerechnen(8);
        }

        private void btn9_Click(object sender, EventArgs e)
        {
            AnzeigeBerechnen(9);
        }

        private void btn10_Click(object sender, EventArgs e)
        {
            AnzeigeBerechnen(10);
        }

        #endregion

        /// <summary>
        /// Beim Speichern wird die Schussfolge in die Datenbank geschrieben, die Methode AllesAufNullSetzen wird aufgerufen
        /// und die Anzeige des ersten Schusses sowie die Summe werden auch auf 0 gesetzt.
        /// </summary>
        private void btnspeichern_Click(object sender, EventArgs e)
        {
            aktuelleZeit =DateTime.Now;
            verbindung.TourEingeben(idperson, aktuelleZeit, Convert.ToInt32(lblschuss1.Text),
                Convert.ToInt32(lblschuss2.Text), Convert.ToInt32(lblschuss3.Text),
                Convert.ToInt32(lblschuss4.Text), Convert.ToInt32(lblschuss5.Text));
            aktuellerSchuss = 1;
            AllesAufNullSetzen();
            lbltour1.Text = lblsumme.Text;
            lblsumme.Text = "0";
            lblschuss1.Text = "0";
            lblschuss1.BackColor = Color.Yellow;
        }

        /// <summary>
        /// Es werden alle Ziffernbuttons wieder auf Enable gesetzt.
        /// Alle Anzeigefelder der Schussfolge werden auf 0 gesetzt.
        /// Die letzten 10 Touren werden um eins weitergereiht.
        /// Die Tourenanzahl wird um den Faktor eins reduziert.
        /// </summary>
        private void AllesAufNullSetzen()
        {
            btn0.Enabled = true;
            btn1.Enabled = true;
            btn2.Enabled = true;
            btn3.Enabled = true;
            btn4.Enabled = true;
            btn5.Enabled = true;
            btn6.Enabled = true;
            btn7.Enabled = true;
            btn8.Enabled = true;
            btn9.Enabled = true;
            btn10.Enabled = true;
            lbltour9.Text = lbltour8.Text;
            lbltour8.Text = lbltour7.Text;
            lbltour7.Text = lbltour6.Text;
            lbltour6.Text = lbltour5.Text;
            lbltour5.Text = lbltour4.Text;
            lbltour4.Text = lbltour3.Text;
            lbltour3.Text = lbltour2.Text;
            lbltour2.Text = lbltour1.Text;
            lblschuss2.Text = "0";
            lblschuss3.Text = "0";
            lblschuss4.Text = "0";
            lblschuss5.Text = "0";
            lblschuss2.BackColor = this.lblsum.BackColor;
            lblschuss3.BackColor = this.lblsum.BackColor;
            lblschuss4.BackColor = this.lblsum.BackColor;
            lblschuss5.BackColor = this.lblsum.BackColor;
            Touren -= 1;
            lblTourenAnzahl.Text = Convert.ToString(Touren);
        }

        /// <summary>
        /// Beim Runterschreiben wird die aktuelle Schussfolge in die Datenbank gespeichert und der letzte eingegebene Wert
        /// wird bei der nächsten Tour als erster Wert gesetzt.
        /// </summary>
        private void btnrunterschreiben_Click(object sender, EventArgs e)
        {
            aktuelleZeit = DateTime.Now;
            verbindung.TourEingeben(idperson, aktuelleZeit, Convert.ToInt32(lblschuss1.Text),
                Convert.ToInt32(lblschuss2.Text), Convert.ToInt32(lblschuss3.Text),
                Convert.ToInt32(lblschuss4.Text), Convert.ToInt32(lblschuss5.Text));
            string speicher = string.Empty;
            string summe = lblsumme.Text;
            switch (aktuellerSchuss-1)
            {
                case 1:
                    {

                        speicher = lblschuss1.Text;
                        break;
                    }
                case 2:
                    {
                        speicher = lblschuss2.Text;
                        break;
                    }
                case 3:
                    {
                        speicher = lblschuss3.Text;
                        break;
                    }
                case 4:
                    {
                        speicher = lblschuss4.Text;
                        break;
                    }
                case 5:
                    {
                        speicher = lblschuss5.Text;
                        break;
                    }
                default:
                    {
                        speicher = "0";
                        break;
                    }
            }
            AllesAufNullSetzen();
            lblschuss1.Text =speicher;
            lbltour1.Text = summe;
            lblsumme.Text = speicher;
            aktuellerSchuss = 2;
            lblschuss2.BackColor = Color.Yellow;
        }

        /// <summary>
        /// Das Fenster wird geschlossen. Es erscheint eine Eingabeaufforderung ob der Anwender das Fenster wirklich schliessen will.
        /// Falls der Anwender Nein anklickt, wird die Eingabeaufforderung geschlossen und er kann im Fenster schusseingabe.cs weiterarbeiten.
        /// Falls der Anwender Ja anklickt, dann dann wird das Fenster schusseingabe.cs geschlossen. Wenn der Spieler mit den Touren genau auf 0 
        /// ist dann wird er aus der Anmeldeliste genommen.
        /// </summary>
        private void btnbeenden_Click(object sender, EventArgs e)
        {
            DialogResult dia= MessageBox.Show("Die Eingabe der Schussfolge wird beendet. Die angezeigte Schussfolge wird NICHT gespeichert !!!\n\n Wollen Sie wirklich beenden?", "Schusseingabe beenden", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            if (dia == DialogResult.Yes)
            {
                if (Touren == 0)
                {
                    verbindung.SpielerAbmelden(idperson);
                }
                this.Close();  
            } 
        }

        /// <summary>
        /// Mit diesem Button wird in der Schussfolge der letzte Werte gelöscht und der Fokus auf den vorherigen Wert gesetzt.
        /// Falls die Schussfolge schon beim ersten Schuss angelangt ist, dann bleibt der Fokus auf dem ersten Schuss.
        /// </summary>
        private void btnRueckgaengig_Click(object sender, EventArgs e)
        {
            switch (aktuellerSchuss)
            {
                case 1:
                    {
                        lblschuss1.Text = "0";
                        break;
                    }
                case 2:
                    {
                        lblschuss2.Text = "0";
                        lblschuss2.BackColor = this.lblsum.BackColor;
                        lblschuss1.BackColor = Color.Yellow;
                        aktuellerSchuss--;
                        break;
                    }
                case 3:
                    {
                        lblschuss3.Text = "0";
                        lblschuss3.BackColor = this.lblsum.BackColor;
                        lblschuss2.BackColor = Color.Yellow;
                        aktuellerSchuss--;
                        break;
                    }
                case 4:
                    {
                        lblschuss4.Text = "0";
                        lblschuss4.BackColor = this.lblsum.BackColor;
                        lblschuss3.BackColor = Color.Yellow;
                        aktuellerSchuss--;
                        break;
                    }
                case 5:
                    {
                        lblschuss5.Text = "0";
                        lblschuss5.BackColor = this.lblsum.BackColor;
                        lblschuss4.BackColor = Color.Yellow;
                        aktuellerSchuss--;
                        break;
                    }
                case 6:
                    {
                        btn0.Enabled = true;
                        btn1.Enabled = true;
                        btn2.Enabled = true;
                        btn3.Enabled = true;
                        btn4.Enabled = true;
                        btn5.Enabled = true;
                        btn6.Enabled = true;
                        btn7.Enabled = true;
                        btn8.Enabled = true;
                        btn9.Enabled = true;
                        btn10.Enabled = true;
                        lblschuss5.BackColor = Color.Yellow;
                        aktuellerSchuss--;
                        break;
                    }
                default:
                    {
                        MessageBox.Show("Sie können nichts mehr rückgängig machen!", "Fehler Rückgängig");
                        break;
                    }
            }
        }
    }
}
